﻿
namespace Domain.Model.Commons
{
    /// <summary>
    /// 实现本接口的所有实体在被删除的时候并不会从资源层（例如关系数据库）删除，而是将该实体的状态标识为已经删除。 
    /// 所有对实现该接口的实体进行查询的操作应该过滤掉已经标识为删除的那些实体。
    /// </summary>
    public interface IDeleteable
    {
        /// <summary>
        /// @return true 已经被删除，通过#markedAsDeleted()可以将其标识为已经删除的状态 false 没有被删除，实体初始化的时候应该表示为没有被删除状态
        /// </summary>
        bool IsDeleted { get; }

        /// <summary>
        /// 标识为删除状态
        /// </summary>
        void MarkedAsDeleted();

        /// <summary>
        /// 标识为可用状态
        /// </summary>
        void MarkedAsAvailable();
    }
}
